import joblib  # 保存和加载模型
import numpy as np
import pandas as pd
import xgboost as xgb  # 极限梯度提升树对象  pip install xgboost
from collections import Counter  # 统计数据
from sklearn.model_selection import train_test_split  # 训练集和测试集划分
from sklearn.metrics import classification_report  # 模型评估和分配报告
from sklearn.model_selection import StratifiedKFold  # 分层K折交叉验证类似于网格搜索cv=折数
from sklearn.utils import class_weight  # 计算样本权重
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score


# 通过xgboost极限梯度提升树完成对红酒品质的分类案例

# （1）数据预处理
def dem01_data_split():
    pass
    # 加载数据：红酒品质分类

    # 特征:iloc

    # 标签

    # 标签编码,并转df

    # 切分训练集和测试集

    # 区分并保存：训练集和测试集
    # concat(axis=x)，to_csv


# （2）定义函数 ，训练模型，并且保存模型
def dem02_train_mode():
    pass
    # 1、读训练集和读测试集

    # 2、提取训练集和测试集中的数据特征  &  标签
    # 训练集

    # 测试集

    # 创建模型: xgb
    # max_depth、n_estimators、learning_rate、
    # objective='multi:softmax'  # 多分类目标函数

    # 模型训练

    # 评估准确率

    # 保存模型: dump(es,'path')


# （3）模型训练
def dem03_use_mode():
    # 1、读训练集和读测试集
    # 1、读训练集和读测试集

    # 2、提取训练集和测试集中的数据特征  &  标签
    # 训练集

    # 测试集

    # 2、提取训练集和测试中的数据特征  &  标签

    # 加载模型: joblib

    param_dict = {
        'max_depth': [5, 10],
        'n_estimators': [3, 5, 10],
        'learning_rate': [0.5, 1.0, 1.2]
    }

    # 交叉验证： 特别适合类别不平衡的数据集,并确保每个训练集和测试集中各类样本的比例与原始数据集相同
    # 创建分层采样: cv = StratifiedKFold
    # n_splits  折数       shuffle 是否打乱数据(作用：防止原始数据顺序对模型训练产生影响)

    # 交叉 + 网格： GridSearchCV


if __name__ == '__main__':
    dem01_data_split()
    # dem02_train_mode()
    # dem03_use_mode()
